package daohibernate;

import hibernate.HibernateUtil;

import java.util.Iterator;
import java.util.List;


import negocio.beans.oficinaventa.Item;
import negocio.beans.oficinaventa.OrdenDePedido;


import org.hibernate.Session;
import org.hibernate.SessionFactory;

public class OrdenDePedidoDAO {
	private static OrdenDePedidoDAO instancia = null;
	private static SessionFactory sf = null;	
	
	public static OrdenDePedidoDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new OrdenDePedidoDAO();
		} 
		return instancia;
	}	
	
	public void grabarOrdenPedido(List<OrdenDePedido> lista){
		Session s = sf.openSession();
		s.beginTransaction();
		for(OrdenDePedido elemento:lista){
			s.persist(elemento);
		}
		s.getTransaction().commit();
		s.flush();
		
		s.close();
	}
	
	public void grabarOrdenPedido(OrdenDePedido op){
		Session s = sf.openSession();
				
		s.persist(op);
		s.getTransaction().commit();
		//s.flush();
		
		s.close();
	}
	
	public List<OrdenDePedido> obtenerOrdenesDePedidoPendientes(){
		Session s = sf.openSession();		
		@SuppressWarnings("unchecked")
		List<OrdenDePedido> lista = s.createQuery("from OrdenDePedido where estado = 0").list();
		s.close();
		return lista;
	}

	public OrdenDePedido obtenerOrdenPedido(int NroOrdenPedido){
		Session s = sf.openSession();

		@SuppressWarnings("unchecked")
		Iterator<Object> ordenes = s.createQuery("from OrdenDePedido op join op.items where NroOrdenDePedido = " + NroOrdenPedido + "").iterate();
		
		OrdenDePedido op = new OrdenDePedido();
		boolean primero = true;
		
		while(ordenes.hasNext()){
			Object[] tupla = (Object[]) ordenes.next();
			if(primero){
				op = (OrdenDePedido)tupla[0];
				primero = false;
			}
			Item it = (Item)tupla[1];
			op.getItems().add(it);

		}
		s.close();
		
		return op;


	}
	
	
	public void modificarOrdenPedido(OrdenDePedido op){
		Session s = sf.openSession();
		s.beginTransaction();
				
		s.update(op);
		
		
		
		s.getTransaction().commit();
		s.flush();
		s.close();
	}
	
}
